package com.by.common.controller;

import com.by.common.bean.ResultBean;
import com.by.common.ex.ValidateException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class BaseController {

    private final int SUCCESS = 200;
    private final int FAIL = 0;

    /**
     * 操作成功
     * @param msg 消息描述
     * @return
     */
    protected ResultBean success(String msg){
        return convert(SUCCESS,msg,null);
    }

    /**
     * 操作成功
     * @param msg 消息描述
     * @param data 接口数据
     * @return
     */
    protected ResultBean success(String msg,Object data){
        return convert(SUCCESS,msg,data);
    }

    /**
     * 操作失败
     * @param msg
     * @return
     */
    protected ResultBean fail(String msg){
        return convert(FAIL,msg,null);
    }

    /**
     * 操作失败
     * @param msg
     * @param data
     * @return
     */
    protected ResultBean fail(String msg,Object data){
        return convert(FAIL,msg,data);
    }

    /**
     * 保存结果
     * @param rs
     * @return
     */
    protected ResultBean saveResult(int rs){
        return rs == 1? success("操作成功") : fail("操作失败");
    }

    /**
     * 修改结果
     * @param rs
     * @return
     */
    protected ResultBean updateResult(int rs){
        return rs == 1? success("修改成功") : fail("修改失败");
    }
    /**
     * 修改结果
     * @param rs,rs1
     * @return
     */
    protected ResultBean updateResult(int rs,int rs1){
        return (rs == 1 && rs1 == 1)? success("修改成功") : fail("修改失败");
    }

    /**
     * 删除结果
     * @param rs
     * @return
     */
    protected ResultBean deleteResult(int rs){
        return rs == 1? success("删除成功") : fail("删除失败");
    }
    /**
     * 删除结果
     * @param rs
     * @return
     */
    protected ResultBean deleteResult(int rs,int rs1){
        return (rs == 1 && rs1 == 1)? success("删除成功") : fail("删除失败");
    }


    /**
     * 转换成统一结果
     * @param code
     * @param msg
     * @param data
     * @return
     */
    ResultBean convert(int code,String msg,Object data){
        return new ResultBean(code,msg,data);
    }

   protected void validate(BindingResult result) {
        List<FieldError> fieldErrors = result.getFieldErrors();
        if (fieldErrors.size() > 0) {
            Map<String, String> error = new HashMap<>();
            fieldErrors.forEach(el->{
                error.put(el.getField(), el.getDefaultMessage());
            });
            throw new ValidateException(error);
        }
    }
}
